package com.probiz.estore.catalog.service;

import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;

import com.probiz.estore.catalog.model.ContentCategoryFullyModel;
import com.probiz.estore.catalog.model.ContentCategorySearchCriteria;
import com.probiz.estore.common.model.catalog.ContentCategory;
import com.probiz.estore.core.search.SearchCriteria;

/**
 * Manager interface for ContentCategory, responsible for business processing, and communicate between web and persistence layer.
 */
public interface ContentCategoryManager extends BaseCategoryManager<ContentCategory> {

    /* =========================start:自定义方法=========================================== */
    /**
     * 完全保存函数
     *
     * @param model 要保存的内容目录
     * @return 返回参数
     */
    public Map<String, Object>  saveFully(ContentCategoryFullyModel model);

    /**
     * 完全删除函数
     *
     * @param contentCategory 要删除的内容目录
     * @return 返回参数
     */
    public Map<String, Object>  deleteFully(ContentCategory contentCategory);

    /**
     * 获取指定目录编码的目录
     *
     * @param categoryCode 目录编码
     * @return 包含指定目录编码的目录实体
     */
    public ContentCategory getCategoryByCode(String categoryCode);

    /**
     * 搜索内容目录
     *
     * @param contentCategorySearchCriteria 自定义搜索条件
     * @param searchCriteria                分页搜索条件
     * @return 内容目录搜索结果列表
     */
    public List<ContentCategory> searchByCriteria(ContentCategorySearchCriteria contentCategorySearchCriteria, SearchCriteria searchCriteria);

    /**
     * 将内容目录列表转换为JSONArray对象
     *
     * @param categoryList 内容目录List对象
     * @return 内容目录JSONArray对象
     */
    public JSONArray convertListToJSONArray(List<ContentCategory> categoryList);


    /* =========================end:自定义方法=========================================== */

    /* =========================start:前台自定义方法=========================================== */

    /**
     * 根据前台uri获得目录id
     *
     * @param uri 前台uri
     * @return 目录id
     */
    public Integer getCategoryIdByUri(String uri);

    /**
     * 根据目录id获得前台uri
     *
     * @param categoryId 目录id
     * @return 前台uri
     */
    public String getUriByCategoryId(Integer categoryId);

    /**
     * 获取导航目录，即获得上级目录和自身目录，不包括根目录
     *
     * @param categoryId 目录主键
     * @return 导航目录。例如 获得金币[卖家帮助，会员服务]
     */
    public List<ContentCategory> getNavigationCategories(Integer categoryId);
    
    
    /**
     * 获取指定文章目录的直系第二级文章目录的categoryCode
     * @param contentCatelogId
     * @return
     */
    public String getSecondLevelContentCatelogCode(Integer contentCatelogId);
    
    /**
     * 获取指定文章目录的直系第二级文章目录的categoryCode
     * @param contentCategory
     * @return
     */
    public String getSecondLevelContentCatelogCode(ContentCategory contentCategory);
	/* =========================end:前台自定义方法=========================================== */
}
